#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include "RingQueue.hpp"

int t = 1;

void *consumer(void *args)
{
    RingQueue<int> *rq = static_cast<RingQueue<int>*>(args);
    while(1)
    {
        sleep(1);
        int y;
        rq->Pop(&y);
        std::cout << "消费了一个数据:" << y << std::endl;
    }
    return 0;
}

void *productor(void *args)
{
    RingQueue<int> *rq = static_cast<RingQueue<int>*>(args);
    
    while(1)
    {
        rq->Equeue(t);
        std::cout << "生产了一个数据:" << t << std::endl;
        t++;
    }
    return 0;
}

int main()
{
    //申请阻塞队列
    RingQueue<int> *rq = new RingQueue<int>();

    //构建生产者与消费者
    pthread_t c1, c2, p1, p2;
    pthread_create(&c1, nullptr, consumer, rq);
    pthread_create(&c2, nullptr, consumer, rq);
    pthread_create(&p1, nullptr, productor, rq);
    pthread_create(&p2, nullptr, productor, rq);

    pthread_join(c1, nullptr);
    pthread_join(c2, nullptr);
    pthread_join(p1, nullptr);
    pthread_join(p2, nullptr);
    return 0;
}